package br.ufrgs.engsoft.ejb;

import java.util.HashMap;

import javax.ejb.Singleton;

import br.ufrgs.engsoft.ejb.local.DatabaseEJBLocal;
import br.ufrgs.engsoft.entity.Autor;
import br.ufrgs.engsoft.entity.Referencia;

/**
 * Implementacao do bean de sessao Singleton.
 * Usado para simular um banco de dados.
 */
@Singleton
public class DatabaseEJB implements DatabaseEJBLocal {
	// Usado para simular um campo auto-incremento do banco de dados
	private Integer referenciaId;
	private Integer autorId;
	
	// Usados para simular tabelas no banco de dados
	private HashMap<Integer, Autor> autores = null;
	private HashMap<Integer, Referencia> referencias = null;

	/**
	 * Construtor padrao.
	 */
	public DatabaseEJB() {
		// inicializacao
		autores = this.inicializarAutores();
		referenciaId = autores.size()+1;

		referencias = this.inicializarReferencias();
		referenciaId = referencias.size()+1;
	}

	public Integer getNewAutorId() {
		return autorId++;
	}

	public Integer getNewReferenciaId() {
		return referenciaId++;
	}

	public HashMap<Integer, Autor> getAutores() {
		return autores;
	}

	public HashMap<Integer, Referencia> getReferencias() {
		return referencias;
	}

	/**
	 * Inicializa a tabela de autores.
	 * @return autores
	 */
	private HashMap<Integer, Autor> inicializarAutores() {
		HashMap<Integer, Autor> tabela = new HashMap<Integer, Autor>();
		
		Autor autor = new Autor();
		autor.setId(1);
		autor.setNome("Luis Fernando");
		autor.setSobrenome("Verissimo");
		tabela.put(autor.getId(), autor);
		
		autor = new Autor();
		autor.setId(2);
		autor.setNome("Jorge");
		autor.setSobrenome("Amado");
		tabela.put(autor.getId(), autor);
		
		autor = new Autor();
		autor.setId(3);
		autor.setNome("Machado de");
		autor.setSobrenome("Assis");
		tabela.put(autor.getId(), autor);
		
		autor = new Autor();
		autor.setId(4);
		autor.setNome("Chico");
		autor.setSobrenome("Buarque");
		tabela.put(autor.getId(), autor);
		
		return tabela;
	}

	/**
	 * Inicializa a tabela de autores.
	 * @return autores
	 */
	private HashMap<Integer, Referencia> inicializarReferencias() {
		Autor autor = new Autor();
		autor.setId(1);
		autor.setNome("Luis Fernando");
		autor.setSobrenome("Verissimo");
		
		HashMap<Integer, Referencia> tabela = new HashMap<Integer, Referencia>();
		
		Referencia referencia = new Referencia();
		referencia.setId(1);
		referencia.setAutor(autor);
		referencia.setTitulo("A grande mulher nua");
		referencia.setAnoPublicacao(1975);
		referencia.setEditora("Jose Olympio");
		tabela.put(referencia.getId(), referencia);
		
		referencia = new Referencia();
		referencia.setId(2);
		referencia.setAutor(autor);
		referencia.setTitulo("O popular");
		referencia.setAnoPublicacao(1973);
		referencia.setEditora("Jose Olympio");
		tabela.put(referencia.getId(), referencia);
		
		referencia = new Referencia();
		referencia.setId(3);
		referencia.setAutor(autor);
		referencia.setTitulo("A mesa voadora");
		referencia.setAnoPublicacao(1982);
		referencia.setEditora("Globo");
		tabela.put(referencia.getId(), referencia);

		autor = new Autor();
		autor.setId(2);
		autor.setNome("Jorge");
		autor.setSobrenome("Amado");

		referencia = new Referencia();
		referencia.setId(4);
		referencia.setAutor(autor);
		referencia.setTitulo("O pais do carnaval");
		referencia.setAnoPublicacao(1930);
		tabela.put(referencia.getId(), referencia);

		referencia = new Referencia();
		referencia.setId(5);
		referencia.setAutor(autor);
		referencia.setTitulo("Gabriela cravo e canela");
		referencia.setAnoPublicacao(1958);
		tabela.put(referencia.getId(), referencia);
		
		return tabela;
	}
}